<?php

class Usuario_Model extends CI_Model{

	var $id = '';
	var $nome  = '';
    var $email = '';
    var $rg    = '';
    var $cpf   = '';
    var $nascimento   = '';
    var $endereco   = '';
    var $bairro   = '';
    var $cidade   = '';
    var $estado   = '';
    var $telefone   = '';
    var $celular   = '';
    var $tipo   = '';
    var $login = '';

    function __construct()
    {
        // Call the Model constructor
        parent::__construct();        
    }

    function salvar($email_sender = NULL){
        $this->id = $this->input->post('id');
        $this->nome = $this->input->post('nome');
        $this->email = $this->input->post('email');
        $this->rg = $this->input->post('rg');
        $this->cpf = str_replace('-','', str_replace('.', '', $this->input->post('cpf'))) ;;
        $this->nascimento = $this->input->post('nascimento');
        $this->endereco = $this->input->post('endereco');
        $this->bairro = $this->input->post('bairro');
        $this->cidade = $this->input->post('cidade');
        $this->estado = $this->input->post('estado');
        $this->telefone = $this->input->post('telefone');
        $this->tipo = $this->input->post('tipo');
        $this->login = $this->input->post('login');

        $message = $this->validar();
        if($message != ''){
            echo $message;
            exit;
        }

    	if($this->id == ''){
            $this->db->trans_off();

            $this->db->trans_start();
            
            $senha = $this->gerarSenha();
            $this->ativo = FALSE;
            $this->senha = md5($senha);
            $this->enviar_email($email_sender, $this->email, $senha, $this->login);
    		$this->db->insert('usuarios', $this);

            $this->db->trans_complete();
            if ($this->db->trans_status() === FALSE) {
                echo 'Erro ao inserir o Usuário no Banco de Dados';
            }

    	} else{
    		$this->db->update('usuarios', $this, array('id' => $this->id));
    	}
    }

    function validar(){
        $message = '';
        if($this->nome == ''){
            $message = 'O campo Nome não pode ser vazio'; 
        } else if($this->email == ''){
            $message = 'O campo E-Mail não pode ser vazio'; 
        } else if($this->rg == ''){
            $message = 'O campo RG não pode ser vazio'; 
        } else if($this->cpf == ''){
            $message = 'O campo CPF não pode ser vazio'; 
        } else if($this->endereco == ''){
            $message = 'O campo Endereço não pode ser vazio'; 
        } else if($this->bairro == ''){
            $message = 'O campo Bairro não pode ser vazio'; 
        } else if($this->cidade == ''){
            $message = 'O campo Cidade não pode ser vazio'; 
        } else if($this->estado == ''){
            $message = 'O campo Estado não pode ser vazio'; 
        } else if($this->telefone == ''){
            $message = 'O campo Telefone não pode ser vazio'; 
        } else if($this->tipo == ''){
            $message = 'O campo Tipo não pode ser vazio';
        } else if($this->login == ''){
            $message = 'O campo Login não pode ser vazio';
        }  

        if($this->id != ''){
            return $message;
        }

        if($this->exists('cpf', 'usuarios', $this->cpf)){
            $message = 'Já existe um usuário cadastrado com este CPF'; 
        } else if($this->exists('rg', 'usuarios', $this->rg)){
            $message = 'Já existe um usuário cadastrado com este RG'; 
        } else if($this->exists('email', 'usuarios', $this->email)){
            $message = 'Já existe um usuário cadastrado com este E-Mail'; 
        } else if($this->exists('login', 'usuarios', $this->login)){
            $message = 'Já existe um usuário cadastrado com este Login'; 
        } 

        return $message;
    }

    function exists($property, $table, $value){
        $query = $this->db->get_where( $table, array($property => $value) );
        $array = $query->result_array(); 
        return !empty($array);
    }

    function listar(){
        $params = array();
        if($this->input->get('nome') != ''){
            $this->db->like('LOWER(nome)', strtolower($this->input->get('nome')));
        }

        if($this->input->get('email') != ''){
            $params['email'] = $this->input->get('email');
        }

        if($this->input->get('cpf') != ''){
            $params['cpf'] = $this->input->get('cpf');
        }

        if($this->input->get('login') != ''){
            $params['login'] = $this->input->get('login');
        }

        if($this->input->get('tipo') != ''){
            $params['tipo'] = $this->input->get('tipo');
        }

        $this->db->where($params);
        $query = $this->db->get( 'usuarios');
        return $query->result_array(); 
    }

    function delete(){
        $this->db->delete('usuarios', array('id' => $this->input->post('id'))); 
    }
 
    function consultar_por_id(){
        $this->db->where('id', $this->input->get('id'));
        $query = $this->db->get( 'usuarios');
        $array = $query->result_array();
        return $array[0]; 
    }

    public function enviar_email($email_sender, $email, $senha, $login){
        
        $email_sender->set_newline("\r\n");
        $email_sender->from('nevadabranca@gmail.com', 'Banco de Questões - Pacatuba');
        $email_sender->to($email); 

        $email_sender->subject('Senha para acesso ao sistema');
        $email_sender->message('Olá, aqui estão as informações de acesso do Sistema de Banco '.
            'de Questões: <br/> <br/>'. 
            ' Usuário;: <b>' . $login . '</b> <br/>'.
            'Senha: ' . $senha .  '<br/> <br/> <br/>'.
            '<a href="http://localhost/BancoQuestoes/index.php/usuario/login">Clique aqui para acessar o Sistema</a>');

        $result = $email_sender->send();
    }

    function gerarSenha($length = 8) {
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $count = mb_strlen($chars);

        for ($i = 0, $result = ''; $i < $length; $i++) {
            $index = rand(0, $count - 1);
            $result .= mb_substr($chars, $index, 1);
        }

        return $result;
    }

    function autenticar($session){
        $login_info = array('login' => $this->input->post('login'), 'senha' => md5($this->input->post('senha')));
        $this->db->where($login_info);
        $query = $this->db->get( 'usuarios', 1);
        
        $usuario = $query->result_array();
        if(empty($usuario)){
            echo 'Login ou Senha Incorretos';
        } else{
            $session->set_userdata($usuario);
        }
    }

    function ativar($usuario){
        if($usuario->ativo){
            $data = array('ativo' => true);
            $this->db->update('usuarios', $usuario, $data);
        }
    }

}

?>